#include<stdio.h>
#include<pthread.h>
#include<semaphore.h>

//Defino semaforos para exclusion
sem_t p;
sem_t c;
char buffer;

void* productor(){
	while(1){
		sem_wait(&p); //Esperar mi turno
		printf("Produciendo.."); fflush(NULL); sleep(rand()%3);
		buffer=rand()/100%26+65; //Lleno el buffer
		printf("producido %c\n",buffer);
		sem_post(&c); //Habilitar consumo
		sleep(rand()%3);
	}
}

void* consumidor(){
	while(1){
		sem_wait(&c); //Esperar mi turno
		printf("Consumiendo.."); fflush(NULL);
		sleep(rand()%3); printf("consumido %c\n",buffer); //Leo el buffer
		sem_post(&p); //Habilitar produccion
		sleep(rand()%3);
	}
}

int main(){
	//defino los threads
	pthread_t t_productor;
	pthread_t t_consumidor;
	//inicializo los semaforos
	sem_init(&p,0,1); //produccion habilitada
	sem_init(&c,0,0); //consumo deshabilitado
	
	//crear los threads
	pthread_create(&t_productor, NULL, productor, NULL);
	pthread_create(&t_consumidor, NULL, consumidor, NULL);
	//esperar a que terminen
	pthread_join(t_productor,NULL);
	pthread_join(t_consumidor,NULL);
	return 0;
}
